/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.gob.fonafe.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;
import pe.gob.fonafe.dao.AdministradorDAO;
import pe.gob.fonafe.dao.impl.stored.ActualizaPerfilSP;
import pe.gob.fonafe.dao.impl.stored.ActualizaUsuarioSP;
import pe.gob.fonafe.dao.impl.stored.BuscarPerfilSP;
import pe.gob.fonafe.dao.impl.stored.DesactivarUsuarioSP;
import pe.gob.fonafe.dao.impl.stored.EliminarPerfilSP;
import pe.gob.fonafe.dao.impl.stored.ListarEmpresasSP;
import pe.gob.fonafe.dao.impl.stored.ListarPerfilesSP;
import pe.gob.fonafe.dao.impl.stored.ListarUsuariosSP;
import pe.gob.fonafe.dao.impl.stored.RegistrarUsuarioSP;
import pe.gob.fonafe.domain.EmpresaBean;
import pe.gob.fonafe.domain.PerfilBean;
import pe.gob.fonafe.domain.UsuarioBean;

/**
 *
 * @author Irving
 */
@Repository
public class AdministradorDAOImp extends SimpleJdbcDaoSupport implements AdministradorDAO{

    private static final Logger logger = Logger.getLogger(AdministradorDAOImp.class);
    
   @Autowired
   public AdministradorDAOImp(DataSource dataSource) {
        super.setDataSource(dataSource);
    }
    
   public List<UsuarioBean> buscarUsuarios(int tb_Perfil_id_perfil, int tb_Empresa_id_empresa, String nombreCompleto, String email) {
        List<UsuarioBean> listaResult = new ArrayList<UsuarioBean>();
        try{
            ListarUsuariosSP sp = new ListarUsuariosSP(getDataSource());
            Map results = sp.execute(tb_Perfil_id_perfil, tb_Empresa_id_empresa, nombreCompleto, email);
            listaResult = (List<UsuarioBean>) results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listaResult;
    }
   
   

    public List<PerfilBean> listarPerfiles() {
        List<PerfilBean> listaResult = new ArrayList<PerfilBean>();
        try{
            ListarPerfilesSP sp = new ListarPerfilesSP(getDataSource());
            Map results = sp.execute();
            listaResult = (List<PerfilBean>) results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listaResult;
    }
    
    public PerfilBean buscarPerfil(int id_perfil) {
        PerfilBean perfilBean = new PerfilBean();
        try{
            BuscarPerfilSP sp = new BuscarPerfilSP(getDataSource());
            Map results = sp.execute(id_perfil);
            perfilBean = (PerfilBean) results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return perfilBean;
    }

    public List<EmpresaBean> listarEmpresas() {
        List<EmpresaBean> listaResult = new ArrayList<EmpresaBean>();
        try{
            ListarEmpresasSP sp = new ListarEmpresasSP(getDataSource());
            Map results = sp.execute();
            listaResult = (List<EmpresaBean>) results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listaResult;
    }

    public String[] actualizarUsuario(UsuarioBean usuarioBean) {
        String[] outputs = new String[2];
        try{
            logger.info("param actualizarUsuario[" + usuarioBean.getId_usuario()+" "+usuarioBean.getNombre() + "]");
            ActualizaUsuarioSP sp = new ActualizaUsuarioSP(getDataSource());
            Map results = sp.execute(usuarioBean);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

     public String[] actualizarPerfil(PerfilBean perfilBean) {
        String[] outputs = new String[2];
        try{
           
            ActualizaPerfilSP sp = new ActualizaPerfilSP(getDataSource());
            Map results = sp.execute(perfilBean);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }
    
    public String[] guardarNuevoUsuario(UsuarioBean usuarioBean) {
        String[] outputs = new String[2];
        try{
            logger.info("param actualizarUsuario[" + usuarioBean.getNombre() + "]");
            RegistrarUsuarioSP sp = new RegistrarUsuarioSP(getDataSource());
            Map results = sp.execute(usuarioBean);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

    public String[] eliminaUsuario(int idUsuario) {
        String[] outputs = new String[2];
        try{
            
            DesactivarUsuarioSP sp = new DesactivarUsuarioSP(getDataSource());
            Map results = sp.execute(idUsuario);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }
    
    public String[] eliminarPerfil(int id_perfil) {
        String[] outputs = new String[2];
        try{            
            EliminarPerfilSP sp = new EliminarPerfilSP(getDataSource());
            Map results = sp.execute(id_perfil);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }
    
}
